class User:
    """用户类：存储单个用户的账号、密码、银行卡号、余额信息"""

    def __init__(self, account, password, bank_card, balance=0.0):
        self.account = account
        self.password = password
        self.bank_card = bank_card
        self.balance = balance

class BankSystem:
    """银行系统类：管理所有用户，提供核心业务功能"""

    def __init__(self):
        self.users = {}  # 存储所有用户：key=登录账号，value=User对象
        self.bank_cards = set()  # 存储已注册银行卡号（用于快速校验唯一性）
        self.current_user = None  # 当前登录的用户（初始为None）

    def register(self):
        """用户注册功能"""
        print("\n===== 用户注册 =====")
        account = input("请输入登录账号（唯一）：")

        # 校验登录账号唯一性
        if account in self.users:
            print("该登录账号已被注册，请更换！")
            return

        # 校验银行卡号（格式+唯一性）
        while True:
            bank_card = input("请输入银行卡号（16-19位数字）：")
            # 格式校验：纯数字 + 长度16-19位
            if not bank_card.isdigit():
                print(" 银行卡号必须为纯数字，请重新输入！")
            elif len(bank_card) not in range(16, 20):
                print("银行卡号长度需为16-19位，请重新输入！")
            # 唯一性校验
            elif bank_card in self.bank_cards:
                print("该银行卡号已绑定其他账号，请更换！")
            else:
                break  # 银行卡号校验通过

        password = input("请输入登录密码：")
        # 创建新用户并添加到系统
        new_user = User(account, password, bank_card)
        self.users[account] = new_user
        self.bank_cards.add(bank_card)  # 记录已注册银行卡号
        print("注册成功！您的银行卡号：", bank_card)

    def login(self):
        """用户登录功能（保持原逻辑，登录后显示绑定的银行卡号）"""
        print("\n===== 用户登录 =====")
        if self.current_user:
            print("  您已登录，无需重复登录！")
            return

        account = input("请输入登录账号：")
        password = input("请输入登录密码：")

        user = self.users.get(account)
        if user and user.password == password:
            self.current_user = user
            print(f"登录成功！欢迎您，{account}！")
            print(f" 绑定的银行卡号：{user.bank_card}")
        else:
            print(" 账号或密码错误，请重新尝试！")

    def check_balance(self):
        """查询余额（保持原逻辑）"""
        print("\n===== 查询余额 =====")
        if not self.current_user:
            print(" 请先登录后再操作！")
            return

        print(f" 银行卡号：{self.current_user.bank_card}")
        print(f" 当前余额：{self.current_user.balance:.2f} 元")

    def show_user_info(self):
        """新增：查询个人信息（账号、银行卡号、余额）"""
        print("\n===== 个人信息查询 =====")
        if not self.current_user:
            print(" 请先登录后再操作！")
            return

